su2_cfd_src = files(['solver_direct_transition.cpp',
                     'solver_adjoint_turbulent.cpp',
                     'integration_structure.cpp',
                     'solver_direct_mean_fem.cpp',
                     'numerics_adjoint_mean.cpp',
                     'transport_model.cpp',
                     'numerics_adjoint_turbulent.cpp',
                     'fluid_model_pvdw.cpp',
                     'integration_time.cpp',
                     'fluid_model_pig.cpp',
                     'solver_direct_mean.cpp',
                     'iteration_structure.cpp',
                     'fluid_model_inc.cpp',
                     'solver_adjoint_mean.cpp',
                     'solver_adjoint_elasticity.cpp',
                     'solver_structure.cpp',
                     'numerics_direct_turbulent.cpp',
                     'numerics_direct_transition.cpp',
                     'solver_template.cpp',
                     'solver_direct_elasticity.cpp',
                     'definition_structure.cpp',
                     'numerics_direct_mean_inc.cpp',
                     'solver_direct_turbulent.cpp',
                     'fluid_model.cpp',
                     'solver_direct_mean_inc.cpp',
                     'numerics_direct_mean.cpp',
                     'solver_direct_heat.cpp',
                     'numerics_direct_heat.cpp',
                     'fluid_model_ppr.cpp',
                     'python_wrapper_structure.cpp',
                     'numerics_structure.cpp',
                     'numerics_template.cpp',
                     'solver_adjoint_discrete.cpp',
                     'CMarkerProfileReaderFVM.cpp',
                     'SU2_CFD.cpp'])

su2_cfd_src += files(['output/CAdjElasticityOutput.cpp',
                      'output/CAdjFlowCompOutput.cpp',
                      'output/CAdjFlowIncOutput.cpp',
                      'output/CAdjHeatOutput.cpp',
                      'output/CBaselineOutput.cpp',
                      'output/CMultizoneOutput.cpp',
                      'output/CElasticityOutput.cpp',
                      'output/CFlowCompOutput.cpp',
                      'output/CFlowCompFEMOutput.cpp',
                      'output/CFlowOutput.cpp',
                      'output/CFlowIncOutput.cpp',
                      'output/CHeatOutput.cpp',
                      'output/CMeshOutput.cpp',
                      'output/output_physics.cpp',
                      'output/COutput.cpp',
                      'output/output_structure_legacy.cpp',
                      'output/filewriter/CParallelDataSorter.cpp',
                      'output/filewriter/CFVMDataSorter.cpp',
                      'output/filewriter/CFEMDataSorter.cpp',
                      'output/filewriter/CSurfaceFEMDataSorter.cpp',
                      'output/filewriter/CSurfaceFVMDataSorter.cpp',
                      'output/filewriter/CParallelFileWriter.cpp',
                      'output/filewriter/CParaviewFileWriter.cpp',
                      'output/filewriter/CParaviewBinaryFileWriter.cpp',
                      'output/filewriter/CTecplotFileWriter.cpp',
                      'output/filewriter/CTecplotBinaryFileWriter.cpp',
                      'output/filewriter/CCSVFileWriter.cpp',
                      'output/filewriter/CSU2FileWriter.cpp',
                      'output/filewriter/CSU2BinaryFileWriter.cpp',
                      'output/filewriter/CSU2MeshFileWriter.cpp'])

su2_cfd_src += files(['variables/CIncNSVariable.cpp',
                      'variables/CTransLMVariable.cpp',
                      'variables/CAdjEulerVariable.cpp',
                      'variables/CHeatFVMVariable.cpp',
                      'variables/CTurbVariable.cpp',
                      'variables/CAdjNSVariable.cpp',
                      'variables/CBaselineVariable.cpp',
                      'variables/CDiscAdjFEAVariable.cpp',
                      'variables/CDiscAdjFEABoundVariable.cpp',
                      'variables/CDiscAdjMeshBoundVariable.cpp',
                      'variables/CFEABoundVariable.cpp',
                      'variables/CDiscAdjVariable.cpp',
                      'variables/CTurbSAVariable.cpp',
                      'variables/CFEAVariable.cpp',
                      'variables/CMeshVariable.cpp',
                      'variables/CMeshBoundVariable.cpp',
                      'variables/CMeshElement.cpp',
                      'variables/CTurbSSTVariable.cpp',
                      'variables/CVariable.cpp',
                      'variables/CNSVariable.cpp',
                      'variables/CAdjTurbVariable.cpp',
                      'variables/CIncEulerVariable.cpp',
                      'variables/CEulerVariable.cpp'])

su2_cfd_src += files(['solvers/CMeshSolver.cpp',
                      'solvers/CDiscAdjMeshSolver.cpp'])

su2_cfd_src += files(['numerics/elasticity/CFEAElasticity.cpp',
                      'numerics/elasticity/CFEALinearElasticity.cpp',
                      'numerics/elasticity/CFEAMeshElasticity.cpp',
                      'numerics/elasticity/CFEANonlinearElasticity.cpp',
                      'numerics/elasticity/CFEM_NeoHookean_Comp.cpp',
                      'numerics/elasticity/CFEM_Knowles_NearInc.cpp',
                      'numerics/elasticity/CFEM_IdealDE.cpp',
                      'numerics/elasticity/CFEM_DielectricElastomer.cpp'])

su2_cfd_src += files(['interfaces/CInterface.cpp',
                      'interfaces/cfd/CConservativeVarsInterface.cpp',
                      'interfaces/cfd/CMixingPlaneInterface.cpp',
                      'interfaces/cfd/CSlidingInterface.cpp',
                      'interfaces/cht/CConjugateHeatInterface.cpp',
                      'interfaces/fsi/CDisplacementsInterface.cpp',
                      'interfaces/fsi/CFlowTractionInterface.cpp',
                      'interfaces/fsi/CDiscAdjFlowTractionInterface.cpp',
                      'interfaces/fsi/CDisplacementsInterfaceLegacy.cpp',
                      'interfaces/fsi/CDiscAdjDisplacementsInterfaceLegacy.cpp'])

su2_cfd_src += files(['drivers/CDriver.cpp',
                      'drivers/CMultizoneDriver.cpp',
                      'drivers/CSinglezoneDriver.cpp',
                      'drivers/CDiscAdjMultizoneDriver.cpp',
                      'drivers/CDiscAdjSinglezoneDriver.cpp',
                      'drivers/CDummyDriver.cpp'])

if get_option('enable-normal')
  su2_cfd = executable('SU2_CFD',
                       su2_cfd_src, 
                       install : true, 
                       dependencies : [su2_deps, common_dep], 
                       cpp_args:  ['-fPIC'] + [default_warning_flags, su2_cpp_args])
endif

if get_option('enable-autodiff')
  su2_cfd_ad = executable('SU2_CFD_AD',
                       su2_cfd_src,
                       install : true, 
                       dependencies : [su2_deps, codi_dep, commonAD_dep], 
                       cpp_args: ['-fPIC'] + [default_warning_flags, su2_cpp_args, codi_rev_args])
endif

if get_option('enable-directdiff')
  su2_cfd_dd = executable('SU2_CFD_DIRECTDIFF',
                       su2_cfd_src,
                       install : true, 
                       dependencies : [su2_deps, codi_dep, commonDD_dep], 
                       cpp_args: ['-fPIC'] + [default_warning_flags, su2_cpp_args, codi_for_args])
endif

